home *** CD-ROM | disk | FTP | other *** search
/ Revista do CD-ROM 97 / CD-ROM 97 / CD-ROM 97.iso / internet / ghostzilla / ghsetup.exe / chrome / pippki.jar / content / pippki / certManager.js < prev    next >
Encoding:
Text File  |  2002-04-09  |  11.0 KB  |  371 lines

  1. /*
  2.  * The contents of this file are subject to the Mozilla Public
  3.  * License Version 1.1 (the "License"); you may not use this file
  4.  * except in compliance with the License. You may obtain a copy of
  5.  * the License at http://www.mozilla.org/MPL/
  6.  *
  7.  * Software distributed under the License is distributed on an "AS
  8.  * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
  9.  * implied. See the License for the specific language governing
  10.  * rights and limitations under the License.
  11.  *
  12.  * The Original Code is mozilla.org code.
  13.  *
  14.  * The Initial Developer of the Original Code is Netscape
  15.  * Communications Corporation.  Portions created by Netscape are
  16.  * Copyright (C) 2001 Netscape Communications Corporation. All
  17.  * Rights Reserved.
  18.  *
  19.  * Contributor(s):
  20.  *  Bob Lord <lord@netscape.com>
  21.  *  Ian McGreer <mcgreer@netscape.com>
  22.  */
  23.  
  24. const nsIFilePicker = Components.interfaces.nsIFilePicker;
  25. const nsFilePicker = "@mozilla.org/filepicker;1";
  26. const nsIX509CertDB = Components.interfaces.nsIX509CertDB;
  27. const nsX509CertDB = "@mozilla.org/security/x509certdb;1";
  28. const nsIX509Cert = Components.interfaces.nsIX509Cert;
  29. const nsICertTree = Components.interfaces.nsICertTree;
  30. const nsCertTree = "@mozilla.org/security/nsCertTree;1";
  31. const nsIDialogParamBlock = Components.interfaces.nsIDialogParamBlock;
  32. const nsDialogParamBlock = "@mozilla.org/embedcomp/dialogparam;1";
  33. const nsIPKIParamBlock    = Components.interfaces.nsIPKIParamBlock;
  34. const nsPKIParamBlock    = "@mozilla.org/security/pkiparamblock;1";
  35.  
  36.  
  37. var key;
  38.  
  39. var selected_certs = [];
  40. var certdb;
  41.  
  42. var caTreeView;
  43. var serverTreeView;
  44. var emailTreeView;
  45. var userTreeView;
  46.  
  47. function LoadCerts()
  48. {
  49.   certdb = Components.classes[nsX509CertDB].getService(nsIX509CertDB);
  50.  
  51.   caTreeView = Components.classes[nsCertTree]
  52.                     .createInstance(nsICertTree);
  53.   caTreeView.loadCerts(nsIX509Cert.CA_CERT);
  54.   document.getElementById('ca-tree')
  55.    .treeBoxObject.view = caTreeView;
  56.  
  57.   serverTreeView = Components.classes[nsCertTree]
  58.                         .createInstance(nsICertTree);
  59.   serverTreeView.loadCerts(nsIX509Cert.SERVER_CERT);
  60.   document.getElementById('server-tree')
  61.    .treeBoxObject.view = serverTreeView;
  62.  
  63.   emailTreeView = Components.classes[nsCertTree]
  64.                        .createInstance(nsICertTree);
  65.   emailTreeView.loadCerts(nsIX509Cert.EMAIL_CERT);
  66.   document.getElementById('email-tree')
  67.    .treeBoxObject.view = emailTreeView; 
  68.  
  69.   userTreeView = Components.classes[nsCertTree]
  70.                       .createInstance(nsICertTree);
  71.   userTreeView.loadCerts(nsIX509Cert.USER_CERT);
  72.   document.getElementById('user-tree')
  73.    .treeBoxObject.view = userTreeView;
  74.  
  75.   var rowCnt = userTreeView.rowCount;
  76.   var enableBackupAllButton=document.getElementById('mine_backupAllButton');
  77.   if(rowCnt < 1) {
  78.     enableBackupAllButton.setAttribute("disabled",true);
  79.   } else  {
  80.     enableBackupAllButton.setAttribute("enabled",true);
  81.   }
  82.  
  83.  
  84.   var bundle = srGetStrBundle("chrome://pippki/locale/pippki.properties");
  85.   var verifiedColText;
  86.   if (certdb.ocspOn) {
  87.     verifiedColText = bundle.GetStringFromName("certmgr.verifiedNoOCSP");
  88.   } else {
  89.     verifiedColText = bundle.GetStringFromName("certmgr.verified");
  90.   }
  91.   var verifiedCol = document.getElementById('verifiedcol');
  92.   verifiedCol.setAttribute('label', verifiedColText);
  93. }
  94.  
  95. function ReloadCerts()
  96. {
  97.   caTreeView.loadCerts(nsIX509Cert.CA_CERT);
  98.   serverTreeView.loadCerts(nsIX509Cert.SERVER_CERT);
  99.   emailTreeView.loadCerts(nsIX509Cert.EMAIL_CERT);
  100.   userTreeView.loadCerts(nsIX509Cert.USER_CERT);
  101. }
  102.  
  103. function getSelectedTab()
  104. {
  105.   var selTab = document.getElementById('certMgrTabbox').selectedItem;
  106.   var selTabID = selTab.getAttribute('id');
  107.   if (selTabID == 'mine_tab') {
  108.     key = "my_certs";
  109.   } else if (selTabID == "others_tab") {
  110.     key = "others_certs";
  111.   } else if (selTabID == "websites_tab") {
  112.     key = "web_certs";
  113.   } else if (selTabID == "ca_tab") {
  114.     key = "ca_certs";
  115.   }  
  116.   return key;
  117. }
  118.  
  119.  
  120. function doHelpButton() {
  121.    var uri = getSelectedTab();
  122.    openHelp(uri);
  123. }
  124.  
  125.  
  126. function getSelectedCerts()
  127. {
  128.   var ca_tab = document.getElementById("ca_tab");
  129.   var mine_tab = document.getElementById("mine_tab");
  130.   var others_tab = document.getElementById("others_tab");
  131.   var websites_tab = document.getElementById("websites_tab");
  132.   var items = null;
  133.   if (ca_tab.selected) {
  134.     items = caTreeView.selection;
  135.   } else if (mine_tab.selected) {
  136.     items = userTreeView.selection;
  137.   } else if (others_tab.selected) {
  138.     items = emailTreeView.selection;
  139.   } else if (websites_tab.selected) {
  140.     items = serverTreeView.selection;
  141.   }
  142.   selected_certs = [];
  143.   var cert = null;
  144.   var nr = 0;
  145.   if (items != null) nr = items.getRangeCount();
  146.   if (nr > 0) {
  147.     for (var i=0; i<nr; i++) {
  148.       var o1 = {};
  149.       var o2 = {};
  150.       items.getRangeAt(i, o1, o2);
  151.       var min = o1.value;
  152.       var max = o2.value;
  153.       for (var j=min; j<=max; j++) {
  154.         if (ca_tab.selected) {
  155.           cert = caTreeView.getCert(j);
  156.         } else if (mine_tab.selected) {
  157.           cert = userTreeView.getCert(j);
  158.         } else if (others_tab.selected) {
  159.           cert = emailTreeView.getCert(j);
  160.         } else if (websites_tab.selected) {
  161.           cert = serverTreeView.getCert(j);
  162.         }
  163.         if (cert)
  164.           selected_certs[selected_certs.length] = cert;
  165.       }
  166.     }
  167.   }
  168. }
  169.  
  170. function ca_enableButtons()
  171. {
  172.   var items = caTreeView.selection;
  173.   var nr = items.getRangeCount();
  174.   var toggle="false";
  175.   if (nr == 0) {
  176.     toggle="true";
  177.   }
  178.   var edit_toggle=toggle;
  179. /*
  180.   var edit_toggle="true";
  181.   if (nr > 0) {
  182.     for (var i=0; i<nr; i++) {
  183.       var o1 = {};
  184.       var o2 = {};
  185.       items.getRangeAt(i, o1, o2);
  186.       var min = o1.value;
  187.       var max = o2.value;
  188.       var stop = false;
  189.       for (var j=min; j<=max; j++) {
  190.         var tokenName = items.tree.view.getCellText(j, "tokencol");
  191.     if (tokenName == "Builtin Object Token") { stop = true; } break;
  192.       }
  193.       if (stop) break;
  194.     }
  195.     if (i == nr) {
  196.       edit_toggle="false";
  197.     }
  198.   }
  199. */
  200.   var enableViewButton=document.getElementById('ca_viewButton');
  201.   enableViewButton.setAttribute("disabled",toggle);
  202.   var enableEditButton=document.getElementById('ca_editButton');
  203.   enableEditButton.setAttribute("disabled",edit_toggle);
  204.   var enableDeleteButton=document.getElementById('ca_deleteButton');
  205.   enableDeleteButton.setAttribute("disabled",toggle);
  206. }
  207.  
  208. function mine_enableButtons()
  209. {
  210.   var items = userTreeView.selection;
  211.   var toggle="false";
  212.   if (items.getRangeCount() == 0) {
  213.     toggle="true";
  214.   }
  215.   var enableViewButton=document.getElementById('mine_viewButton');
  216.   enableViewButton.setAttribute("disabled",toggle);
  217.   var enableBackupButton=document.getElementById('mine_backupButton');
  218.   enableBackupButton.setAttribute("disabled",toggle);
  219.   var enableDeleteButton=document.getElementById('mine_deleteButton');
  220.   enableDeleteButton.setAttribute("disabled",toggle);
  221. }
  222.  
  223. function websites_enableButtons()
  224. {
  225.   var items = serverTreeView.selection;
  226.   var toggle="false";
  227.   if (items.getRangeCount() == 0) {
  228.     toggle="true";
  229.   }
  230.   var enableViewButton=document.getElementById('websites_viewButton');
  231.   enableViewButton.setAttribute("disabled",toggle);
  232.   var enableEditButton=document.getElementById('websites_editButton');
  233.   enableEditButton.setAttribute("disabled",toggle);
  234.   var enableDeleteButton=document.getElementById('websites_deleteButton');
  235.   enableDeleteButton.setAttribute("disabled",toggle);
  236. }
  237.  
  238. function email_enableButtons()
  239. {
  240.   var items = emailTreeView.selection;
  241.   var toggle="false";
  242.   if (items.getRangeCount() == 0) {
  243.     toggle="true";
  244.   }
  245.   var enableViewButton=document.getElementById('email_viewButton');
  246.   enableViewButton.setAttribute("disabled",toggle);
  247.   var enableDeleteButton=document.getElementById('email_deleteButton');
  248.   enableDeleteButton.setAttribute("disabled",toggle);
  249. }
  250.  
  251. function backupCerts()
  252. {
  253.   getSelectedCerts();
  254.   var numcerts = selected_certs.length;
  255.   var bundle = srGetStrBundle("chrome://pippki/locale/pippki.properties");
  256.   var fp = Components.classes[nsFilePicker].createInstance(nsIFilePicker);
  257.   fp.init(window,
  258.           bundle.GetStringFromName("chooseP12BackupFileDialog"),
  259.           nsIFilePicker.modeSave);
  260.   fp.appendFilter("PKCS12 Files", "*.p12");
  261.   fp.appendFilters(nsIFilePicker.filterAll);
  262.   var rv = fp.show();
  263.   if (rv == nsIFilePicker.returnOK || rv == nsIFilePicker.returnReplace) {
  264.     certdb.exportPKCS12File(null, fp.file, 
  265.                             selected_certs.length, selected_certs);
  266.   }
  267. }
  268.  
  269. function backupAllCerts()
  270. {
  271.   // Select all rows, then call doBackup()
  272.   var items = userTreeView.selection.selectAll();
  273.   backupCerts();
  274. }
  275.  
  276. function editCerts()
  277. {
  278.   getSelectedCerts();
  279.   var numcerts = selected_certs.length;
  280.   for (var t=0; t<numcerts; t++) {
  281.     var cert = selected_certs[t];
  282.     var certkey = cert.dbKey;
  283.     var ca_tab = document.getElementById("ca_tab");
  284.     if (ca_tab.selected) {
  285.       window.openDialog('chrome://pippki/content/editcacert.xul', certkey,
  286.                   'chrome,width=100,resizable=1,modal');
  287.     } else {
  288.       window.openDialog('chrome://pippki/content/editsslcert.xul', certkey,
  289.                   'chrome,width=100,resizable=1,modal');
  290.     }
  291.   }
  292. }
  293.  
  294. function restoreCerts()
  295. {
  296.   var bundle = srGetStrBundle("chrome://pippki/locale/pippki.properties");
  297.   var fp = Components.classes[nsFilePicker].createInstance(nsIFilePicker);
  298.   fp.init(window,
  299.           bundle.GetStringFromName("chooseP12RestoreFileDialog"),
  300.           nsIFilePicker.modeOpen);
  301.   fp.appendFilter("PKCS12 Files", "*.p12;*.pfx");
  302.   fp.appendFilters(nsIFilePicker.filterAll);
  303.   if (fp.show() == nsIFilePicker.returnOK) {
  304.     var certdb = Components.classes[nsX509CertDB].getService(nsIX509CertDB);
  305.     certdb.importPKCS12File(null, fp.file);
  306.   }
  307.   userTreeView.loadCerts(nsIX509Cert.USER_CERT);
  308. }
  309.  
  310. function deleteCerts()
  311. {
  312.   getSelectedCerts();
  313.  
  314.   var params = Components.classes[nsDialogParamBlock].createInstance(nsIDialogParamBlock);
  315.   
  316.   var bundle = srGetStrBundle("chrome://pippki/locale/pippki.properties");
  317.   var selTab = document.getElementById('certMgrTabbox').selectedItem;
  318.   var selTabID = selTab.getAttribute('id');
  319.   var numcerts = selected_certs.length;
  320.  
  321.   params.SetNumberStrings(numcerts+1);
  322.  
  323.   if (selTabID == 'mine_tab') 
  324.   {
  325.     params.SetString(0,bundle.GetStringFromName("deleteUserCertFlag"));
  326.   } 
  327.   else if (selTabID == "websites_tab") 
  328.   {
  329.     params.SetString(0,bundle.GetStringFromName("deleteSslCertFlag"));
  330.   } 
  331.   else if (selTabID == "ca_tab") 
  332.   {
  333.     params.SetString(0,bundle.GetStringFromName("deleteCaCertFlag"));
  334.   }
  335.   else if (selTabID == "others_tab") 
  336.   {
  337.     params.SetString(0,bundle.GetStringFromName("deleteEmailCertFlag"));
  338.   }
  339.   else
  340.   {
  341.     return;
  342.   }
  343.  
  344.   params.SetInt(0,numcerts);
  345.   for (var t=0; t<numcerts; t++) 
  346.   {
  347.     var cert = selected_certs[t];
  348.     params.SetString(t+1, cert.dbKey);  
  349.   }
  350.    
  351.   window.openDialog('chrome://pippki/content/deletecert.xul', "",
  352.                 'chrome,resizable=1,modal',params);
  353.  
  354.   ReloadCerts();
  355. }
  356.  
  357. function viewCerts()
  358. {
  359.   getSelectedCerts();
  360.   var numcerts = selected_certs.length;
  361.   for (var t=0; t<numcerts; t++) {
  362.     selected_certs[t].view();
  363.   }
  364. }
  365.  
  366. /* XXX future - import a DER cert from a file? */
  367. function addCerts()
  368. {
  369.   alert("Add cert chosen");
  370. }
  371.